package com.example.permission.service;

import com.example.permission.common.page.Page;
import com.example.permission.common.result.Result;
import com.example.permission.entity.dto.LoginDTO;
import com.example.permission.entity.dto.PasswordDTO;
import com.example.permission.entity.dto.SysUserDTO;
import com.example.permission.entity.dto.page.SysUserPageDTO;
import com.example.permission.entity.po.SysUser;
import com.example.permission.entity.vo.SysAclVO;
import com.example.permission.entity.vo.SysActVO;

import java.util.List;
import java.util.Map;

/**
 * 用户信息表(SysUser)表服务接口
 *
 * @author xuwq
 * @date 2020-05-09 15:56:07
 */
public interface SysUserService {
    /**
     * 登陆
     *
     * @param loginDTO
     * @return
     */
    Result<Map<String, Object>> login(LoginDTO loginDTO);

    /**
     * 新增数据
     *
     * @param sysUserDTO 实例对象
     * @return 实例对象
     */
    SysUser insert(SysUserDTO sysUserDTO);

    /**
     * 修改数据
     *
     * @param sysUserDTO 实例对象
     * @return 实例对象
     */
    SysUser update(SysUserDTO sysUserDTO);

    /**
     * 通过主键删除数据
     *
     * @param userId 主键
     * @return 是否成功
     */
    boolean deleteById(Integer userId);

    /**
     * 通过ID查询单条数据
     *
     * @param userId 主键
     * @return 实例对象
     */
    SysUser queryById(Integer userId);

    /**
     * 查询分页列表
     *
     * @param sysUserPageDTO
     * @return
     */
    Page<SysUser> queryListByPage(SysUserPageDTO sysUserPageDTO);

    /**
     * 用户角色分配
     *
     * @param userId
     * @param roleIds
     */
    void roleDistribution(Integer userId, String roleIds);

    /**
     * 查询用户权限
     *
     * @param userId
     * @return
     */
    List<SysActVO> queryRolesByUserId(Integer userId);

    /**
     * 查询用户菜单权限
     *
     * @param roleIds
     * @return
     */
    List<SysAclVO> queryMenusByRoleIds(String roleIds);

    /**
     * 重置密码
     * @param userId
     */
    void resetPassword(Integer userId);

    /**
     * 忘记密码
     * @param userId
     * @param passwordDTO
     * @return
     */
    Result forgetPassword(Integer userId, PasswordDTO passwordDTO);
}